{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "#encoding=utf-8\n",
    "import pandas as pd\n",
    "import lightgbm as lgb\n",
    "import _pickle as cPickle\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "import matplotlib.pyplot as plt\n",
    "from lightgbm.sklearn import LGBMClassifier\n",
    "\n",
    "%matplotlib inline\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# train_x_raw_csv = \"../../data/train_x.csv\"\n",
    "train_x_raw_csv = \"../../../DataCastle-Solution_hubo/code/data1/train_x.csv\"\n",
    "test_x_raw_csv = \"../../data/test_x.csv\"\n",
    "# train_x_rank_csv = \"../../../DataCastle-Solution_hubo/code/data1/train_x_discretization.csv\"\n",
    "# test_x_rank_csv = \"../../../DataCastle-Solution_hubo/code/data1/test_x_discretization.csv\"\n",
    "\n",
    "# train_y_csv = \"../../data/train_y.csv\"\n",
    "train_y_csv = \"../../../DataCastle-Solution_hubo/code/data1/train_y.csv\"\n",
    "\n",
    "features_type_csv = \"../../data/features_type.csv\"\n",
    "features_types = pd.read_csv(features_type_csv)\n",
    "train_x_raw = pd.read_csv(train_x_raw_csv)\n",
    "test_x_raw = pd.read_csv(test_x_raw_csv)\n",
    "\n",
    "# train_x_rank = pd.read_csv(train_x_rank_csv)\n",
    "# test_x_rank = pd.read_csv(test_x_rank_csv)\n",
    "\n",
    "train_y = pd.read_csv(train_y_csv)\n",
    "\n",
    "type(features_types)\n",
    "categorical_features = features_types[features_types.type == 'category'].feature.values.tolist()\n",
    "\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 626,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(14981, 1139)"
      ]
     },
     "execution_count": 626,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_x_raw.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 627,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "# train_x_merge = pd.merge(train_x_rank,train_x_raw[['uid']+categorical_features],on='uid')\n",
    "train_x_merge = train_x_raw\n",
    "train_x = train_x_merge.drop(['uid'],axis=1)\n",
    "\n",
    "# test_x_merge = pd.merge(test_x_rank,test_x_raw[['uid']+categorical_features],on='uid')\n",
    "test_x_merge = test_x_raw\n",
    "test_x = test_x_merge.drop(['uid'],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 628,
   "metadata": {},
   "outputs": [],
   "source": [
    "lgb_data = lgb.Dataset(train_x,label = train_y['y'], free_raw_data = False)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 629,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<lightgbm.basic.Dataset at 0x7fb6f1af3550>"
      ]
     },
     "execution_count": 629,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lgb_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 630,
   "metadata": {},
   "outputs": [],
   "source": [
    "seed=2019\n",
    "params = {\n",
    "    'num_leaves':127, \n",
    "    'objective':'binary',\n",
    "    'max_depth':7,\n",
    "    'learning_rate':.05,\n",
    "    'max_bin':200,\n",
    "    'metric':['auc']\n",
    "}\n",
    "# {'learning_rate': 0.1, 'max_depth': 3, 'n_estimators': 85, 'num_leaves': 31}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 631,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_round=85"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 632,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 交叉验证\n",
    "cvresult = lgb.cv(params, lgb_data, num_boost_round = num_round, nfold=5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 639,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'auc-mean': [0.5984425437347269,\n",
       "  0.621628437870257,\n",
       "  0.6318236754745293,\n",
       "  0.6371371771071624,\n",
       "  0.6410400321729529,\n",
       "  0.6435489299886621,\n",
       "  0.6477441438108047,\n",
       "  0.651675814577817,\n",
       "  0.6519678793801649,\n",
       "  0.6535733767984981,\n",
       "  0.6536570864555001,\n",
       "  0.656014252015899,\n",
       "  0.6559951149066203,\n",
       "  0.6559359144465009,\n",
       "  0.6576837516642801,\n",
       "  0.6590517154842962,\n",
       "  0.6593548926861492,\n",
       "  0.6586385373324087,\n",
       "  0.6595904026144144,\n",
       "  0.6608324982225164,\n",
       "  0.6615137131731922,\n",
       "  0.6627808660147643,\n",
       "  0.6636820609753169,\n",
       "  0.6642038453593042,\n",
       "  0.6645209220511534,\n",
       "  0.6653649546848012,\n",
       "  0.6669847100450214,\n",
       "  0.6666993197966888,\n",
       "  0.6673403029202267,\n",
       "  0.6682929077779979,\n",
       "  0.6681876792806708,\n",
       "  0.6689293385234352,\n",
       "  0.6693651237708971,\n",
       "  0.6697705074509209,\n",
       "  0.6697610626149547,\n",
       "  0.6694400273164577,\n",
       "  0.6691955271646023,\n",
       "  0.6697627778678402,\n",
       "  0.6701241153548063,\n",
       "  0.6696241754277469,\n",
       "  0.6700482744399613,\n",
       "  0.6702816348295717,\n",
       "  0.6708938425142048,\n",
       "  0.6706777425408234,\n",
       "  0.6703794284796147,\n",
       "  0.6708201319840968,\n",
       "  0.6708537099747225,\n",
       "  0.6700493916215353,\n",
       "  0.6703430375993439,\n",
       "  0.670518576610918,\n",
       "  0.6707592983593114,\n",
       "  0.6706431490016571,\n",
       "  0.671396288086432,\n",
       "  0.6716673660582945,\n",
       "  0.6721327265184538,\n",
       "  0.6719812565545489,\n",
       "  0.672282392105121,\n",
       "  0.6733375274940809,\n",
       "  0.6732075708979532,\n",
       "  0.6732860667803455,\n",
       "  0.6732948877458457,\n",
       "  0.6737954132355355,\n",
       "  0.6739178138065316,\n",
       "  0.673815342691578,\n",
       "  0.6740734171077227,\n",
       "  0.6742090174643702,\n",
       "  0.6741147098273702,\n",
       "  0.6744146992700435,\n",
       "  0.6749497940633299,\n",
       "  0.6751294460855833,\n",
       "  0.6750884950092865,\n",
       "  0.6747609997588325,\n",
       "  0.6753197797396393,\n",
       "  0.6758502627385905,\n",
       "  0.676582075304011,\n",
       "  0.6766024112921868,\n",
       "  0.6768211052532956,\n",
       "  0.6770579876184073,\n",
       "  0.6773074146270011,\n",
       "  0.6771722122027687,\n",
       "  0.6776329718136889,\n",
       "  0.6774946172018381,\n",
       "  0.6773728702094253,\n",
       "  0.6775499884419787,\n",
       "  0.6771381190108435],\n",
       " 'auc-stdv': [0.019296710733089303,\n",
       "  0.007578318020883408,\n",
       "  0.0027352470060360654,\n",
       "  0.004538652670933044,\n",
       "  0.0070522076854450085,\n",
       "  0.006612535438597325,\n",
       "  0.008118433601470016,\n",
       "  0.004989171246907542,\n",
       "  0.005302435519373103,\n",
       "  0.00426213949923356,\n",
       "  0.004538186140303859,\n",
       "  0.0062401069092207165,\n",
       "  0.0063800572878048275,\n",
       "  0.005871417221796895,\n",
       "  0.005565373031093411,\n",
       "  0.004671303565622109,\n",
       "  0.0038475041025706307,\n",
       "  0.004136541877936415,\n",
       "  0.004759154227190546,\n",
       "  0.005033819931256803,\n",
       "  0.005720894793030944,\n",
       "  0.006654658533660541,\n",
       "  0.00635007265442736,\n",
       "  0.0060363825165420555,\n",
       "  0.006785373855246599,\n",
       "  0.006741965923971101,\n",
       "  0.007586985142964702,\n",
       "  0.007831515720134408,\n",
       "  0.00771930605294272,\n",
       "  0.007484039399649319,\n",
       "  0.007443839416863024,\n",
       "  0.006454999394060239,\n",
       "  0.00625142719135364,\n",
       "  0.007045610079270946,\n",
       "  0.006028193295087416,\n",
       "  0.006274818677090476,\n",
       "  0.0060390646793480746,\n",
       "  0.006458880876703649,\n",
       "  0.006326431901569159,\n",
       "  0.007170708373923739,\n",
       "  0.006972904141252232,\n",
       "  0.006810230358038176,\n",
       "  0.007532514455969365,\n",
       "  0.006890263161044989,\n",
       "  0.006879492463132156,\n",
       "  0.007014258521662456,\n",
       "  0.006373187636256453,\n",
       "  0.006228419582812571,\n",
       "  0.006455290085567567,\n",
       "  0.0065501313735291744,\n",
       "  0.006138561121551154,\n",
       "  0.006161091342546181,\n",
       "  0.006468019970243138,\n",
       "  0.006801213400740689,\n",
       "  0.006903613514084536,\n",
       "  0.006929793771999361,\n",
       "  0.007028486443020455,\n",
       "  0.00771807111973972,\n",
       "  0.007640225899138689,\n",
       "  0.007863509839562686,\n",
       "  0.007637067481227668,\n",
       "  0.007878033084487448,\n",
       "  0.007880371124177782,\n",
       "  0.007880636155543052,\n",
       "  0.007623140513131637,\n",
       "  0.007402060001789319,\n",
       "  0.007422649666235024,\n",
       "  0.007692476688156522,\n",
       "  0.007856180557021898,\n",
       "  0.007700332627872634,\n",
       "  0.007895060128947806,\n",
       "  0.008050955390098537,\n",
       "  0.00774572268470947,\n",
       "  0.00776298276754464,\n",
       "  0.00786634353399622,\n",
       "  0.008218776133306958,\n",
       "  0.008110271569333595,\n",
       "  0.008154969017246725,\n",
       "  0.007899993412339868,\n",
       "  0.00796945484533745,\n",
       "  0.007771844393809884,\n",
       "  0.008058436515961442,\n",
       "  0.00785975116130014,\n",
       "  0.008104232413963568,\n",
       "  0.008242428443268033]}"
      ]
     },
     "execution_count": 639,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cvresult"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 640,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_round = len(cvresult['auc-mean'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 641,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "85"
      ]
     },
     "execution_count": 641,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(cvresult['auc-mean'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 642,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot\n",
    "test_means = cvresult['auc-mean']\n",
    "test_stds = cvresult['auc-stdv'] \n",
    "        \n",
    "x_axis = range(0, num_round)\n",
    "        \n",
    "plt.errorbar(x_axis, test_means, yerr=0 ,label='Test')\n",
    "plt.title(\"LightGBM n_estimators vs AUC\")\n",
    "plt.xlabel( 'num_boost_round' )\n",
    "plt.ylabel( 'AUC' )\n",
    "# plt.savefig( 'n_estimators4_1.png' )\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 643,
   "metadata": {},
   "outputs": [],
   "source": [
    "lgbm = lgb.train(params, lgb_data,num_round, categorical_feature = categorical_features)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 645,
   "metadata": {},
   "outputs": [],
   "source": [
    "predict_result = lgbm.predict(test_x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 646,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5000"
      ]
     },
     "execution_count": 646,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(predict_result)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 647,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': range(3, 10, 2), 'num_leaves': [7, 31, 127, 511]}"
      ]
     },
     "execution_count": 647,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "param_dict"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 648,
   "metadata": {},
   "outputs": [],
   "source": [
    "# estimator = LGBMClassifier(\n",
    "# #         silent=False\n",
    "#         num_leaves = 31,\n",
    "#         max_depth = 6,\n",
    "#         learning_rate =0.1, \n",
    "#         n_estimators = num_round, \n",
    "# #         objective = 'binary:logistic', \n",
    "#         min_child_weight = 1, \n",
    "#         subsample = 0.8,\n",
    "#         colsample_bytree=0.8,\n",
    "#         nthread = 7,\n",
    "# )\n",
    "# gsearch = GridSearchCV( estimator , param_grid = param_dict, scoring='roc_auc', cv=5 , refit = True)\n",
    "    \n",
    "lg = lgb.LGBMClassifier(silent=False)\n",
    "param_dist = {\"max_depth\": [3,5, 7],\n",
    "              \"learning_rate\" : [0.01,0.05,0.1],\n",
    "              \"num_leaves\": [7, 31, 127],\n",
    "              \"n_estimators\": [num_round]\n",
    "             }\n",
    "gsearch = GridSearchCV(lg, n_jobs=-1, param_grid=param_dist, cv = 3, scoring=\"roc_auc\", verbose=5)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 649,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 27 candidates, totalling 81 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 12 concurrent workers.\n",
      "[Parallel(n_jobs=-1)]: Done  48 tasks      | elapsed:  1.3min\n",
      "[Parallel(n_jobs=-1)]: Done  75 out of  81 | elapsed:  2.0min remaining:    9.7s\n",
      "[Parallel(n_jobs=-1)]: Done  81 out of  81 | elapsed:  2.4min finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=3, error_score='raise-deprecating',\n",
       "       estimator=LGBMClassifier(boosting_type='gbdt', class_weight=None, colsample_bytree=1.0,\n",
       "        importance_type='split', learning_rate=0.1, max_depth=-1,\n",
       "        min_child_samples=20, min_child_weight=0.001, min_split_gain=0.0,\n",
       "        n_estimators=100, n_jobs=-1, num_leaves=31, objective=None,\n",
       "        random_state=None, reg_alpha=0.0, reg_lambda=0.0, silent=False,\n",
       "        subsample=1.0, subsample_for_bin=200000, subsample_freq=0),\n",
       "       fit_params=None, iid='warn', n_jobs=-1,\n",
       "       param_grid={'max_depth': [3, 5, 7], 'learning_rate': [0.01, 0.05, 0.1], 'num_leaves': [7, 31, 127], 'n_estimators': [85]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='roc_auc', verbose=5)"
      ]
     },
     "execution_count": 649,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch.fit(train_x, train_y['y'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 650,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'learning_rate': 0.1, 'max_depth': 3, 'n_estimators': 85, 'num_leaves': 31}"
      ]
     },
     "execution_count": 650,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch.best_params_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 651,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.6744935323366764"
      ]
     },
     "execution_count": 651,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 652,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.1"
      ]
     },
     "execution_count": 652,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch.best_params_['learning_rate']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 653,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'num_leaves': 31,\n",
       " 'objective': 'binary',\n",
       " 'max_depth': 3,\n",
       " 'learning_rate': 0.1,\n",
       " 'max_bin': 200,\n",
       " 'metric': ['auc']}"
      ]
     },
     "execution_count": 653,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "params.update(num_leaves = gsearch.best_params_['num_leaves'])\n",
    "params.update(max_depth = gsearch.best_params_['max_depth'])\n",
    "params.update(learning_rate = gsearch.best_params_['learning_rate'])\n",
    "params"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 654,
   "metadata": {},
   "outputs": [],
   "source": [
    "lgbm2 = lgb.train(params, lgb_data,num_round, categorical_feature = categorical_features)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 655,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1138"
      ]
     },
     "execution_count": 655,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(lgbm2.feature_importance())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 656,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1 2 1 ... 0 2 4]\n"
     ]
    }
   ],
   "source": [
    "print(lgbm2.feature_importance())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 657,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "297"
      ]
     },
     "execution_count": 657,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "feature_importance = []\n",
    "for item in sorted(lgbm2.feature_importance(),reverse=True):\n",
    "    if item > 0:\n",
    "        feature_importance.append(item)\n",
    "len(feature_importance)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 658,
   "metadata": {},
   "outputs": [],
   "source": [
    "# lgbm.save_model(\"raw_lgbm.txt\")\n",
    "test_uid = test_x_merge.uid\n",
    "predict_result2 = lgbm2.predict(test_x, axis = 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 659,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.96188999, 0.89530931, 0.82121403, ..., 0.93281617, 0.90140296,\n",
       "       0.93111992])"
      ]
     },
     "execution_count": 659,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predict_result2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 660,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_result = pd.DataFrame(columns=[\"uid\",\"score\"])\n",
    "test_result.uid = test_uid\n",
    "test_result.score = predict_result2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 661,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_result.to_csv(\"test_predict_result.csv\",index=None,encoding='utf-8') "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 662,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>uid</th>\n",
       "      <th>score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0.961890</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0.895309</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>9</td>\n",
       "      <td>0.821214</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>12</td>\n",
       "      <td>0.961762</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14</td>\n",
       "      <td>0.889333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>20</td>\n",
       "      <td>0.921204</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>25</td>\n",
       "      <td>0.943592</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>28</td>\n",
       "      <td>0.940257</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>30</td>\n",
       "      <td>0.945316</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>33</td>\n",
       "      <td>0.950186</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>35</td>\n",
       "      <td>0.938917</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>37</td>\n",
       "      <td>0.937184</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>43</td>\n",
       "      <td>0.954848</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>44</td>\n",
       "      <td>0.944299</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>45</td>\n",
       "      <td>0.944290</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>46</td>\n",
       "      <td>0.912377</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>52</td>\n",
       "      <td>0.729820</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>53</td>\n",
       "      <td>0.915573</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>55</td>\n",
       "      <td>0.743318</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>56</td>\n",
       "      <td>0.936767</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>57</td>\n",
       "      <td>0.941145</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>59</td>\n",
       "      <td>0.940857</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>60</td>\n",
       "      <td>0.909673</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>66</td>\n",
       "      <td>0.913782</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>74</td>\n",
       "      <td>0.802396</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>75</td>\n",
       "      <td>0.913532</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>83</td>\n",
       "      <td>0.934580</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>84</td>\n",
       "      <td>0.857936</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>87</td>\n",
       "      <td>0.946253</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>88</td>\n",
       "      <td>0.943438</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4970</th>\n",
       "      <td>19910</td>\n",
       "      <td>0.750987</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4971</th>\n",
       "      <td>19911</td>\n",
       "      <td>0.961743</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4972</th>\n",
       "      <td>19912</td>\n",
       "      <td>0.924134</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4973</th>\n",
       "      <td>19916</td>\n",
       "      <td>0.926391</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4974</th>\n",
       "      <td>19925</td>\n",
       "      <td>0.945094</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4975</th>\n",
       "      <td>19932</td>\n",
       "      <td>0.864122</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4976</th>\n",
       "      <td>19934</td>\n",
       "      <td>0.896102</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4977</th>\n",
       "      <td>19936</td>\n",
       "      <td>0.923774</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4978</th>\n",
       "      <td>19938</td>\n",
       "      <td>0.818755</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4979</th>\n",
       "      <td>19942</td>\n",
       "      <td>0.891954</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4980</th>\n",
       "      <td>19944</td>\n",
       "      <td>0.856087</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4981</th>\n",
       "      <td>19945</td>\n",
       "      <td>0.937514</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4982</th>\n",
       "      <td>19947</td>\n",
       "      <td>0.876742</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4983</th>\n",
       "      <td>19950</td>\n",
       "      <td>0.799223</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4984</th>\n",
       "      <td>19953</td>\n",
       "      <td>0.944971</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4985</th>\n",
       "      <td>19957</td>\n",
       "      <td>0.846364</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4986</th>\n",
       "      <td>19959</td>\n",
       "      <td>0.946769</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4987</th>\n",
       "      <td>19965</td>\n",
       "      <td>0.885579</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4988</th>\n",
       "      <td>19966</td>\n",
       "      <td>0.954311</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4989</th>\n",
       "      <td>19970</td>\n",
       "      <td>0.968004</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4990</th>\n",
       "      <td>19972</td>\n",
       "      <td>0.913456</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4991</th>\n",
       "      <td>19976</td>\n",
       "      <td>0.938688</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4992</th>\n",
       "      <td>19978</td>\n",
       "      <td>0.832103</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4993</th>\n",
       "      <td>19980</td>\n",
       "      <td>0.962751</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4994</th>\n",
       "      <td>19984</td>\n",
       "      <td>0.856490</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4995</th>\n",
       "      <td>19985</td>\n",
       "      <td>0.925841</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4996</th>\n",
       "      <td>19990</td>\n",
       "      <td>0.918054</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4997</th>\n",
       "      <td>19991</td>\n",
       "      <td>0.932816</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4998</th>\n",
       "      <td>19995</td>\n",
       "      <td>0.901403</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4999</th>\n",
       "      <td>19996</td>\n",
       "      <td>0.931120</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5000 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        uid     score\n",
       "0         1  0.961890\n",
       "1         2  0.895309\n",
       "2         9  0.821214\n",
       "3        12  0.961762\n",
       "4        14  0.889333\n",
       "5        20  0.921204\n",
       "6        25  0.943592\n",
       "7        28  0.940257\n",
       "8        30  0.945316\n",
       "9        33  0.950186\n",
       "10       35  0.938917\n",
       "11       37  0.937184\n",
       "12       43  0.954848\n",
       "13       44  0.944299\n",
       "14       45  0.944290\n",
       "15       46  0.912377\n",
       "16       52  0.729820\n",
       "17       53  0.915573\n",
       "18       55  0.743318\n",
       "19       56  0.936767\n",
       "20       57  0.941145\n",
       "21       59  0.940857\n",
       "22       60  0.909673\n",
       "23       66  0.913782\n",
       "24       74  0.802396\n",
       "25       75  0.913532\n",
       "26       83  0.934580\n",
       "27       84  0.857936\n",
       "28       87  0.946253\n",
       "29       88  0.943438\n",
       "...     ...       ...\n",
       "4970  19910  0.750987\n",
       "4971  19911  0.961743\n",
       "4972  19912  0.924134\n",
       "4973  19916  0.926391\n",
       "4974  19925  0.945094\n",
       "4975  19932  0.864122\n",
       "4976  19934  0.896102\n",
       "4977  19936  0.923774\n",
       "4978  19938  0.818755\n",
       "4979  19942  0.891954\n",
       "4980  19944  0.856087\n",
       "4981  19945  0.937514\n",
       "4982  19947  0.876742\n",
       "4983  19950  0.799223\n",
       "4984  19953  0.944971\n",
       "4985  19957  0.846364\n",
       "4986  19959  0.946769\n",
       "4987  19965  0.885579\n",
       "4988  19966  0.954311\n",
       "4989  19970  0.968004\n",
       "4990  19972  0.913456\n",
       "4991  19976  0.938688\n",
       "4992  19978  0.832103\n",
       "4993  19980  0.962751\n",
       "4994  19984  0.856490\n",
       "4995  19985  0.925841\n",
       "4996  19990  0.918054\n",
       "4997  19991  0.932816\n",
       "4998  19995  0.901403\n",
       "4999  19996  0.931120\n",
       "\n",
       "[5000 rows x 2 columns]"
      ]
     },
     "execution_count": 662,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
